package pool

import (
	"sync"
)

// Exec poolSize 定义协程池的大小
func Exec(poolSize int, tasks []func()) {
	// 创建一个等待组，用于等待所有协程完成
	var wg sync.WaitGroup
	// 创建一个有缓冲的通道，用于接收任务
	taskChan := make(chan func(), poolSize)
	// 启动协程池
	for i := 0; i < poolSize; i++ {
		wg.Add(1)
		go func(p int) {
			// 从通道中接收任务并执行
			for task := range taskChan {
				task()
			}
			wg.Done()
		}(i)
	}
	// 添加任务到通道中
	for _, task := range tasks {
		taskChan <- task
	}
	// 关闭通道，表示任务添加完成
	close(taskChan)
	// 等待所有协程完成
	wg.Wait()
}
